package hust.hbhmzy.udpchat;

/**
 * Created by hbhmzy on 2018/11/20/0020.
 */

public class SpeexUtil {

    /*
     *Speex是一套主要针对语音的开源免费，无专利保护的音频压缩格式。
     * SpeexUtil类主要编写native方法，具体实现由jni中speex_jni.cpp实现。 之后通过ndk—build编译生成.so库，放入jniLibs中进行应用。
     * jni文件夹与具体实现的speex_jni也在项目中。
     */

    private static final int DEFAULT_COMPRESSION = 8;

    static {
        try {
            System.loadLibrary("speex");
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }

    private static SpeexUtil speexUtil = null;

    SpeexUtil() {
        open(DEFAULT_COMPRESSION);
    }

    public static SpeexUtil getInstance(){
        if (speexUtil == null) {
            synchronized (SpeexUtil.class) {
                if (speexUtil == null) {
                    speexUtil = new SpeexUtil();
                }
            }
        }
        return speexUtil;
    }

    //设置默认比例
    public native int open(int compression);
    //获取每一帧的大小
    public native int getFrameSize();
    //解码 （需要解码的数据，解码后的数据，需要解码的数据长度）
    public native int decode(byte encoded[], short lin[], int size);
    //编码 （需要编码的数据，编码开始的偏移值，编码后的数据，需要编码的数据长度）
    public native int encode(short lin[], int offset, byte encoded[], int size);
    //释放资源
    public native void close();


}
